package com.scholarship.modules.backend.service;


import com.scholarship.modules.backend.entity.CreateTableInfo;
import com.scholarship.modules.backend.exce.CreateTableException;
import com.scholarship.modules.backend.mapper.CreateTableMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

/**
 * @author zhz
 * @date 2021/4/10 20:10
 * 备注：
 */
@Service
public class CreateTableService {
    @Autowired
    CreateTableMapper createTableMapper;
    @Autowired
    AttributeTypeService attributeTypeService;

    /**
     *
     * @param info 创建表需要的属性
     *     String table_name;//表名
     *     List<Detail>
     *     String item_name;//属性中文名
     *     String attribute_name;//属性英文名
     *     Integer attribute_id;//属性类型id
     *     String attribute;//属性类型
     * @return 0 :改表已存在，或创建表格失败，请重试！
     *          -1：表格关联失败，请重新添加表格
     *          -2：数据关联失败，请重新添加表格
     *         -3: 未知错误
     *          1: 成功添加奖学金表格
     */
    @Transactional(rollbackFor=Exception.class)//事务的注解，失败就rollback
    public void createTable(CreateTableInfo info) throws Exception{
            //表已存在
        if(createTableMapper.isTableExist(info.getTable_name())==1){
            throw new CreateTableException("改表已存在，或创建表格失败，请重试！");
        }
        for(CreateTableInfo.Detail detail:info.getList()){
            detail.setAttribute(attributeTypeService.getAttributeTypeById(detail.getAttribute_id()).getAttribute());
//                System.out.println(detail.getAttribute_id()+"--"+detail.getAttribute_name());
        }
        //创建表失败
        if(createTableMapper.createTable(info)!=0||createTableMapper.updateTableName(info)==0){
            throw new CreateTableException("表格关联失败，请重新添加表格！");
        }else if(createTableMapper.insertTableInfo(info)==0){
            throw new CreateTableException("数据关联失败，请重新添加表格！");
        }
    }
}